基础知识: malloc v.s realloc
Get the knowledge flowing and circulating! :)
目录
malloc与realloc使用简述顺序表番外:
malloc,realloc使用区别直观查看~
malloc & free 小例子xxxxxxxxxx191void Init_SqList03(SqList *L)2{3 L->elem = (int*)malloc(List_InitSize * sizeof(int));4 if (!L->elem)5 {6 exit(-2);7 }8 9 L->length = 0;10 L->listsize = List_InitSize;11}12
13void DestroyList_Sq(SqList *L)14{15 free(L->elem); // free((*L).elem);16 L->elem = NULL; // (*L).elem = NULL; // 置空,防止野指针 17 L->length = 0; // (*L).length = 0; 18 L->listsize = 0; // (*L).listsize = 0; 19} realloc小例子xxxxxxxxxx311int ListInsert_Sq(SqList *L, int i, int e)2{3 if((i < 1) || i > L->length + 1)4 return 0;5 6 if (L->length >= L->listsize)7 {8 int *newbase = (int*)realloc(L->elem, (L->listsize + List_Increment) * sizeof(int));9 if (!newbase)10 {11 exit(-2);12 }13 14 L->elem = newbase;15 L->listsize = L->listsize + List_Increment;16 }17 18 int *q = L->elem + i - 1; // q指向待插入的位置19 int *p; 20 for (p = L->elem + L->length - 1; p >= q; p--)21 {22 *(p + 1) = *(p);23 }24 // 腾出位置后,在q位置插入元素e25 *q = e;26 // 插入元素后,长度别忘记加啦~ 27 L->length++;28 29 return 0; 30}31
malloc
L->elem = (int*)malloc(List_InitSize * sizeof(int));
free(L->elem); // free((*L).elem);
realloc
int *newbase = (int*)realloc(L->elem, (L->listsize + List_Increment) * sizeof(int));
L->elem = newbase;
解读:
realloc相比malloc就是后面的参数时,多了一个基址。即,realloc是在malloc的基址上进行重分配的
以上内容,包括这一系列的刷题内容,都是Ben的个人理解,可能会出现错误,如果发现,欢迎联系,一起更正、讨论!
Progress together!:)